package com.wmm.fast.main.shop2Observer;

/**
 * @Auther: wangzun
 * @Date: 2018/9/13 10:17
 * @Description: 观察者模式Client
 * 流程:通过attach 添加observers,而observer的state依赖于通知者的state,所以达到通过通知者state修改,观察者随之更新的效果.修改通知者的state之后,调用notify,就是调用所有观察者的update,更新来自通知者的state.随之处理逻辑
 * 动机: 为了降低维护对象关系一致性的耦合性,方便多系统协调的扩展和维护.让耦合双方依赖于抽象,而不是互相耦合依赖,从而使得各自变化互不影响.
 * 场景: 当一个对象发生变化的同时,需要改变其他对象时,而且对象本身不知道具体有多少对象待改变,则适用观察者模式.
 * 缺点: 实际场景观察者并非都统一为update 操作, 如果不一致则无法达到这个效果.解决: 使用事件委托机制
 *
 */
public class ObserverExecute {
    public static void main(String[] args) {

        ConcrateSubject subject = new ConcrateSubject();

        subject.attach(new ConcrateObserver(subject, "A观察"));
        subject.attach(new ConcrateObserver(subject, "B观察"));
        subject.attach(new ConcrateObserver(subject, "C观察"));
        subject.setSubjectState("ABC");
        subject.notifys();
    }
}
